import re
import json


def extract_json(text):
    """
    从文本中提取JSON代码
    """
    json_pattern = re.compile(r'```json\n(.*?)\n```', re.DOTALL)
    match = json_pattern.search(text)

    if match:
        json_str = match.group(1)
        try:
            json_data = json.loads(json_str)
            return json_data
        except json.JSONDecodeError as e:
            print(f"JSON解析错误: {e}")
            return None
    else:
        print("未找到JSON代码段")
        return None


# 测试
text = '''绘制一个100*100的正方形
错误：CAD 命令执行失败：设计命令生成失败
命令：一个100*100的正方形

>>> 请输入指令：2025-03-05 12:55:16,032 - Main - ERROR - 解析失败的原始响应：<think>
好的，我现在需要根据用户的描述生成一个CAD命令的JSON格式。用户的要求是一个100*100的正方形，并且有一些具体要求。

首先，我得确定使用哪种CAD命令来画正方形。在CAD中，通常可以用矩形（RECTANGLE）命令，或者通过绘制四条线段来完成。考虑到效率和简洁性，使用 RECTANGLE 命令比较合适，因为它可以直接指定宽度和高度，从而快速生成一个矩形。

接下来，用户指定了当前图层为“轮廓线”，所以命令中的层参数必须设为这个值。材料是Q235，这可能需要添加到材料属性中，但要看CAD系统是否支持这样的扩展属性。如果支持的话，可以在params里加一个"material": "Q235"。

然后是标准的要求，使用GB/T 14665-2023，特别是其中关于尺寸公差的部分。用户要求包含尺寸公差信息，这意味着我需要添加tolerance字段，并且引用相关的条款。比如，宽度和高度都有各自的公差，这里可能需要查一下标准的具体数值。

接下来是输出格式示例，用户给了一个圆的例子，里面包含了command、params、layer以及compliance数组。所以我需要按照这个结构来组织正方形的命令。

现在，我开始构建JSON结构：

1. command字段应该是RECTANGLE。
2. params里包括两个点，分别是左下角和右上角的位置，这里假设原点在中心，那么坐标是[-50,-50]到[50,50]。这样正方形的边长就是100单位。
3. 层设为“轮廓线”。
4. 添加材料属性Q235，如果CAD支持的话。
5. 尺寸公差部分，假设宽度和高度都是100±0.5mm，这个数值需要根据标准确定。同时，引用GB/TC 14665-2023中的具体条款，比如5.3.1可能涉及尺寸公差。

最后，检查整个结构是否符合用户的要求，并确保所有参数都正确无误。
</think>

```json
{
    "command": "RECTANGLE",
    "params": {
        "point1": [-50, -50],
        "point2": [50, 50],
        "layer": "轮廓线",
        "material": "Q235",
        "tolerance": {
            "width": "+/-0.5mm",
            "height": "+/-0.5mm"
        }
    },
    "compliance": ["GB/TC 14665-2023 5.3.1"]
}
```
2025-03-05 12:55:16,037 - Main - ERROR - 设计命令生成失败：命令解析失败：invalid character '，' (U+FF0C) (<unknown>, line 2)
2025-03-05 12:55:16,037 - Main - ERROR - 操作执行失败：CAD 命令执行失败：设计命令生成失败'''

extracted_json = extract_json(text)
if extracted_json:
    print(json.dumps(extracted_json, indent=4, ensure_ascii=False))